import { http } from "@/utils/http";

/** 统一响应格式 */
export interface ApiResponse<T = any> {
  /** 状态码 */
  code: number;
  /** 响应消息 */
  message: string;
  /** 响应数据 */
  data?: T;
  /** 时间戳 */
  timestamp?: number;
}

/** 登录请求参数 */
export interface LoginRequest {
  /** 用户名 */
  userName: string;
  /** 密码 */
  password: string;
}

/** 登录响应数据 */
export interface LoginData {
  /** 访问令牌 */
  token: string;
  /** 用户ID */
  userId: number;
  /** 用户名 */
  userName: string;
  /** 用户昵称 */
  nickname?: string;
  /** 用户头像 */
  avatar?: string;
  /** 用户角色列表 */
  roles: Array<string>;
  /** 用户权限列表 */
  permissions: Array<string>;
  /** 过期时间（秒） */
  expireTime: number;
}

/** 登录响应结果 */
export type LoginResult = ApiResponse<LoginData>;

/** 刷新Token响应数据 */
export interface RefreshTokenData {
  /** 访问令牌 */
  token: string;
  /** 用户ID */
  userId: number;
  /** 用户名 */
  userName: string;
  /** 用户昵称 */
  nickname?: string;
  /** 用户头像 */
  avatar?: string;
  /** 用户角色列表 */
  roles: Array<string>;
  /** 用户权限列表 */
  permissions: Array<string>;
  /** 过期时间（秒） */
  expireTime: number;
}

/** 刷新Token响应结果 */
export type RefreshTokenResult = ApiResponse<RefreshTokenData>;

/** 检查登录状态响应结果 */
export type CheckLoginResult = ApiResponse<boolean>;

/** 注销响应结果 */
export type LogoutResult = ApiResponse;

/** 用户登录 */
export const loginApi = (data: LoginRequest) => {
  return http.request<LoginResult>("post", "/auth/login", { data });
};

/** 用户注销 */
export const logoutApi = () => {
  return http.request<LogoutResult>("post", "/auth/logout");
};

/** 获取当前用户信息 */
export const getUserInfoApi = () => {
  return http.request<LoginResult>("get", "/auth/userinfo");
};

/** 检查登录状态 */
export const checkLoginApi = () => {
  return http.request<CheckLoginResult>("get", "/auth/check");
};

/** 刷新Token */
export const refreshTokenApi = () => {
  return http.request<RefreshTokenResult>("post", "/auth/refresh");
};

// 兼容性：保留原有的getLogin函数名
export const getLogin = loginApi;
